package lib

//根据主键，查询单条数据

import (
	"fmt"
	"strconv"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/service/dynamodb"
	"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"
)

func GetItem() {
	channel_id := "618ce82659f1a" //主键

	//配置查询参数
	params := &dynamodb.GetItemInput{
		Key: map[string]*dynamodb.AttributeValue{
			"channel_id": {
				S: aws.String(channel_id), //S代表数据类型是字符串
			},
		},
		TableName: aws.String("live"),
	}

	//执行查询
	resp, err := DynamoClient.GetItem(params)
	fmt.Println(resp)

	//将查询结果，转换成go语言支持的数据类型，这里是转成的map
	live := map[string]interface{}{}
	if err == nil {
		dynamodbattribute.UnmarshalMap(resp.Item, &live)
	} else {
		fmt.Println(err.Error())
	}

	fmt.Println(live)
	//会将整数转换成float64，所以显示的是科学计数的方式
	fmt.Printf("%T\n", live["count"])
}

//一定注意，这里的成员，首字母必须大写。否则在UnmarshalMap时会匹配不到
type Group struct {
	Group_id    int //在dynamodb中，字段名是group_id 下同
	User_id     int
	Create_time int
}

//和上面的区别
//1 主键是两个字段的复合
//2 解包到一个结构体，而非map
func GetItem2() {
	group_id := 3 //主键
	user_id := 643643798

	//配置查询参数
	params := &dynamodb.GetItemInput{
		Key: map[string]*dynamodb.AttributeValue{
			"group_id": {
				//需要先把int 转换string，再调用 aws.String
				N: aws.String(strconv.Itoa(group_id)), //N代表数据类型是数字
			},
			"user_id": {
				N: aws.String(strconv.Itoa(user_id)),
			},
		},
		TableName: aws.String("group"),
	}

	//执行查询
	resp, err := DynamoClient.GetItem(params)
	fmt.Println(resp)

	group := Group{}
	if err == nil {
		//将查询结果，转换成go语言支持的数据类型，这里是转成的结构体
		dynamodbattribute.UnmarshalMap(resp.Item, &group)
	} else {
		fmt.Println(err.Error())
	}
	fmt.Println(group)
}
